{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2393ec0e",
   "metadata": {},
   "source": [
    "# 1.分析目的：\n",
    "完成用户分类（RFM 模型），即对比分析不同用户群体在时间、地区等维度下交易量，交易金额指标，并根据分析结果提出优化建议。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "ed537174",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from pyecharts.charts import Pie\n",
    "import pyecharts.options as opts\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "c2864d91",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e90e1a6",
   "metadata": {},
   "source": [
    "# 2.读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "8fa1c342",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv(\"data.csv\",encoding='utf-8')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "61fbf222",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>InvoiceDate</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536365</td>\n",
       "      <td>85123A</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536365</td>\n",
       "      <td>71053</td>\n",
       "      <td>WHITE METAL LANTERN</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536365</td>\n",
       "      <td>84406B</td>\n",
       "      <td>CREAM CUPID HEARTS COAT HANGER</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029G</td>\n",
       "      <td>KNITTED UNION FLAG HOT WATER BOTTLE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029E</td>\n",
       "      <td>RED WOOLLY HOTTIE WHITE HEART.</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  InvoiceNo StockCode                          Description  Quantity  \\\n",
       "0    536365    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6   \n",
       "1    536365     71053                  WHITE METAL LANTERN         6   \n",
       "2    536365    84406B       CREAM CUPID HEARTS COAT HANGER         8   \n",
       "3    536365    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6   \n",
       "4    536365    84029E       RED WOOLLY HOTTIE WHITE HEART.         6   \n",
       "\n",
       "      InvoiceDate  UnitPrice  CustomerID         Country  \n",
       "0  12/1/2010 8:26       2.55     17850.0  United Kingdom  \n",
       "1  12/1/2010 8:26       3.39     17850.0  United Kingdom  \n",
       "2  12/1/2010 8:26       2.75     17850.0  United Kingdom  \n",
       "3  12/1/2010 8:26       3.39     17850.0  United Kingdom  \n",
       "4  12/1/2010 8:26       3.39     17850.0  United Kingdom  "
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62f6f47f",
   "metadata": {},
   "source": [
    "# 3.数据维度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "8922540f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(541909, 8)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75d17707",
   "metadata": {},
   "source": [
    "# 4.数据信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "622b0d22",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 541909 entries, 0 to 541908\n",
      "Data columns (total 8 columns):\n",
      " #   Column       Non-Null Count   Dtype  \n",
      "---  ------       --------------   -----  \n",
      " 0   InvoiceNo    541909 non-null  object \n",
      " 1   StockCode    541909 non-null  object \n",
      " 2   Description  540455 non-null  object \n",
      " 3   Quantity     541909 non-null  int64  \n",
      " 4   InvoiceDate  541909 non-null  object \n",
      " 5   UnitPrice    541909 non-null  float64\n",
      " 6   CustomerID   406829 non-null  float64\n",
      " 7   Country      541909 non-null  object \n",
      "dtypes: float64(2), int64(1), object(5)\n",
      "memory usage: 33.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48c06d0c",
   "metadata": {},
   "source": [
    "# 5.数据清洗"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b5a30e3",
   "metadata": {},
   "source": [
    "## 5.1缺失处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "ae95659d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "InvoiceNo      0.000000\n",
       "StockCode      0.000000\n",
       "Description    0.002683\n",
       "Quantity       0.000000\n",
       "InvoiceDate    0.000000\n",
       "UnitPrice      0.000000\n",
       "CustomerID     0.249267\n",
       "Country        0.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计缺失率\n",
    "df.apply(lambda x: sum(x.isnull()) / len(x), axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "645063a9",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# Description字段对该数据分析目标无意义，删除\n",
    "df.drop(['Description'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "b7ff884f",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 缺失的用户ID填充为'U'\n",
    "df['CustomerID'] = df['CustomerID'].fillna('U')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "5aadd99a",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 每个订单的发生额\n",
    "df['amount'] = df['Quantity'] * df['UnitPrice']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "91376d41",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 将 InvoiceDate字段拆分成两列，之后删除InvoiceDate字段\n",
    "df['Date'] = pd.to_datetime(df['InvoiceDate']).dt.date\n",
    "df['Time'] = pd.to_datetime(df['InvoiceDate']).dt.time\n",
    "df['Date'] = pd.to_datetime(df['Date'])\n",
    "df.drop(['InvoiceDate'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "13171bfc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "      <th>amount</th>\n",
       "      <th>Date</th>\n",
       "      <th>Time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536365</td>\n",
       "      <td>85123A</td>\n",
       "      <td>6</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>15.30</td>\n",
       "      <td>2010-12-01</td>\n",
       "      <td>08:26:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536365</td>\n",
       "      <td>71053</td>\n",
       "      <td>6</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>20.34</td>\n",
       "      <td>2010-12-01</td>\n",
       "      <td>08:26:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536365</td>\n",
       "      <td>84406B</td>\n",
       "      <td>8</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>22.00</td>\n",
       "      <td>2010-12-01</td>\n",
       "      <td>08:26:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029G</td>\n",
       "      <td>6</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>20.34</td>\n",
       "      <td>2010-12-01</td>\n",
       "      <td>08:26:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029E</td>\n",
       "      <td>6</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>20.34</td>\n",
       "      <td>2010-12-01</td>\n",
       "      <td>08:26:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  InvoiceNo StockCode  Quantity  UnitPrice CustomerID         Country  amount  \\\n",
       "0    536365    85123A         6       2.55    17850.0  United Kingdom   15.30   \n",
       "1    536365     71053         6       3.39    17850.0  United Kingdom   20.34   \n",
       "2    536365    84406B         8       2.75    17850.0  United Kingdom   22.00   \n",
       "3    536365    84029G         6       3.39    17850.0  United Kingdom   20.34   \n",
       "4    536365    84029E         6       3.39    17850.0  United Kingdom   20.34   \n",
       "\n",
       "        Date      Time  \n",
       "0 2010-12-01  08:26:00  \n",
       "1 2010-12-01  08:26:00  \n",
       "2 2010-12-01  08:26:00  \n",
       "3 2010-12-01  08:26:00  \n",
       "4 2010-12-01  08:26:00  "
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2538796b",
   "metadata": {},
   "source": [
    "# 6.重复值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "6a38e5f8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Quantity</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>541909.000000</td>\n",
       "      <td>541909.000000</td>\n",
       "      <td>541909.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>9.552250</td>\n",
       "      <td>4.611114</td>\n",
       "      <td>17.987795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>218.081158</td>\n",
       "      <td>96.759853</td>\n",
       "      <td>378.810824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-80995.000000</td>\n",
       "      <td>-11062.060000</td>\n",
       "      <td>-168469.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>3.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>2.080000</td>\n",
       "      <td>9.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>10.000000</td>\n",
       "      <td>4.130000</td>\n",
       "      <td>17.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>80995.000000</td>\n",
       "      <td>38970.000000</td>\n",
       "      <td>168469.600000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            Quantity      UnitPrice         amount\n",
       "count  541909.000000  541909.000000  541909.000000\n",
       "mean        9.552250       4.611114      17.987795\n",
       "std       218.081158      96.759853     378.810824\n",
       "min    -80995.000000  -11062.060000 -168469.600000\n",
       "25%         1.000000       1.250000       3.400000\n",
       "50%         3.000000       2.080000       9.750000\n",
       "75%        10.000000       4.130000      17.400000\n",
       "max     80995.000000   38970.000000  168469.600000"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "12f380a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除重复值\n",
    "df = df.drop_duplicates()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41c332c4",
   "metadata": {},
   "source": [
    "# 7.异常分析"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a311aab",
   "metadata": {},
   "source": [
    "## 7.1缺失处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "49e63e03",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对单价进行异常分析\n",
    "df2 = df.loc[df['UnitPrice'] <= 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "bbd135c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0046809866595607106"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.shape[0]/df.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "f58b15ba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       " 0.00        2510\n",
       "-11062.06       2\n",
       "Name: UnitPrice, dtype: int64"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 异常值中单价的分类\n",
    "df2['UnitPrice'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbbc81a4",
   "metadata": {},
   "source": [
    "# 8.数据分析与可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "468f9f8f",
   "metadata": {},
   "source": [
    "## 8.1退货率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "14a51531",
   "metadata": {},
   "outputs": [],
   "source": [
    "df1 = df.loc[df['Quantity'] <= 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "89f7d9fa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>Date</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-74729.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011</th>\n",
       "      <td>-131363.05</td>\n",
       "      <td>-25519.15</td>\n",
       "      <td>-34201.28</td>\n",
       "      <td>-44600.65</td>\n",
       "      <td>-47202.51</td>\n",
       "      <td>-70569.78</td>\n",
       "      <td>-37919.13</td>\n",
       "      <td>-54330.8</td>\n",
       "      <td>-38838.51</td>\n",
       "      <td>-81895.5</td>\n",
       "      <td>-47720.98</td>\n",
       "      <td>-205089.27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Date         1         2         3         4         5         6         7   \\\n",
       "Date                                                                          \n",
       "2010        NaN       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "2011 -131363.05 -25519.15 -34201.28 -44600.65 -47202.51 -70569.78 -37919.13   \n",
       "\n",
       "Date       8         9        10        11         12  \n",
       "Date                                                   \n",
       "2010      NaN       NaN      NaN       NaN  -74729.12  \n",
       "2011 -54330.8 -38838.51 -81895.5 -47720.98 -205089.27  "
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 退货情况\n",
    "returns = pd.pivot_table(df1, index=df1['Date'].dt.year, columns=df1['Date'].dt.month, values='amount', aggfunc={'amount':np.sum})\n",
    "returns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "ca860c1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 筛选出销售的正常数据\n",
    "df3 = df[(df['Quantity'] > 0) & (df['UnitPrice'] > 0)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "0855ba50",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>Date</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>821452.73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011</th>\n",
       "      <td>689811.61</td>\n",
       "      <td>522545.56</td>\n",
       "      <td>716215.26</td>\n",
       "      <td>536968.491</td>\n",
       "      <td>769281.76</td>\n",
       "      <td>760547.01</td>\n",
       "      <td>718076.121</td>\n",
       "      <td>757841.38</td>\n",
       "      <td>1056435.192</td>\n",
       "      <td>1151263.73</td>\n",
       "      <td>1503329.78</td>\n",
       "      <td>637790.33</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Date         1          2          3           4          5          6   \\\n",
       "Date                                                                      \n",
       "2010        NaN        NaN        NaN         NaN        NaN        NaN   \n",
       "2011  689811.61  522545.56  716215.26  536968.491  769281.76  760547.01   \n",
       "\n",
       "Date          7          8            9           10          11         12  \n",
       "Date                                                                         \n",
       "2010         NaN        NaN          NaN         NaN         NaN  821452.73  \n",
       "2011  718076.121  757841.38  1056435.192  1151263.73  1503329.78  637790.33  "
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 营业额\n",
    "sales = pd.pivot_table(df3, index=df3['Date'].dt.year, columns=df3['Date'].dt.month, values='amount', aggfunc={'amount':np.sum})\n",
    "sales"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc51ded8",
   "metadata": {},
   "source": [
    "## 8.1.1 2011年每月退货率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "ff54a9d2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>Date</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.090972</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011</th>\n",
       "      <td>0.190433</td>\n",
       "      <td>0.048836</td>\n",
       "      <td>0.047753</td>\n",
       "      <td>0.08306</td>\n",
       "      <td>0.061359</td>\n",
       "      <td>0.092788</td>\n",
       "      <td>0.052807</td>\n",
       "      <td>0.071692</td>\n",
       "      <td>0.036764</td>\n",
       "      <td>0.071135</td>\n",
       "      <td>0.031744</td>\n",
       "      <td>0.321562</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Date        1         2         3        4         5         6         7   \\\n",
       "Date                                                                        \n",
       "2010       NaN       NaN       NaN      NaN       NaN       NaN       NaN   \n",
       "2011  0.190433  0.048836  0.047753  0.08306  0.061359  0.092788  0.052807   \n",
       "\n",
       "Date        8         9         10        11        12  \n",
       "Date                                                    \n",
       "2010       NaN       NaN       NaN       NaN  0.090972  \n",
       "2011  0.071692  0.036764  0.071135  0.031744  0.321562  "
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 退货率\n",
    "return_rate = np.abs(returns) / sales\n",
    "return_rate"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0356497c",
   "metadata": {},
   "source": [
    "## 8.1.2 2011年月平均退货率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "fc8d91c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.09249438130255831"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 平均退货率\n",
    "avg_return = return_rate[1:2].mean(axis=1).values[0]\n",
    "avg_return"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c22b41b",
   "metadata": {},
   "source": [
    "## 8.1.3 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "5375508b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 取出2011年退货率数据，用于画图\n",
    "return_rate_11 = [round(i, 2) for i in return_rate.values.tolist()[1]]\n",
    "month = return_rate.columns.tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "66654121",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.ticker import FuncFormatter\n",
    "plt.figure(figsize=(10,5), dpi=70)\n",
    "plt.style.use('fivethirtyeight')\n",
    "plt.plot(month, return_rate_11, 'bo-', lw=2, label='月退货率')\n",
    "plt.title('每月退货率', fontdict={'color':'black', 'fontsize':16}, pad=12)\n",
    "plt.xlabel('月份', fontdict={'color':'black', 'fontsize':14})\n",
    "plt.ylabel('退货率', fontdict={'color':'black', 'fontsize':14})\n",
    "plt.yticks([])\n",
    "plt.xticks(np.arange(1, 13))\n",
    "plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x, position: '{:.1f}%'.format(x*100)))\n",
    "for i, j in zip(month, return_rate_11):\n",
    "    plt.text(i-0.02, j-0.02, '{:.1f}%'.format(j*100), bbox=dict(facecolor='red', alpha=0.1))\n",
    "plt.axhline(y=avg_return,ls='--', color='r', lw=2, label='平均退货率') \n",
    "plt.annotate('{:.1f}%'.format(round(avg_return, 3)*100), xy=(8, avg_return), xytext=(8.5, avg_return+0.05), arrowprops=dict(facecolor='red', shrink=0.05))\n",
    "plt.grid(b=False)\n",
    "plt.legend(loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79e68641",
   "metadata": {},
   "source": [
    "# 8.2 用户分级（RFM模型）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f962faa6",
   "metadata": {},
   "source": [
    "## 8.2.1 计算R,F,M"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "ac537fcf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CustomerID\n",
       "12346.0   2011-01-18\n",
       "12347.0   2011-12-07\n",
       "12348.0   2011-09-25\n",
       "12349.0   2011-11-21\n",
       "12350.0   2011-02-02\n",
       "Name: Date, dtype: datetime64[ns]"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 每位用户最近一次购买时间\n",
    "customer_newest_consume = df3.groupby('CustomerID')['Date'].max()\n",
    "customer_newest_consume.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "4f31cc6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 目标时间（最近一次购买时间）\n",
    "newest_time_consume = df3['Date'].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "516ca276",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CustomerID\n",
       "12346.0    325\n",
       "12347.0      2\n",
       "12348.0     75\n",
       "12349.0     18\n",
       "12350.0    310\n",
       "          ... \n",
       "18281.0    180\n",
       "18282.0      7\n",
       "18283.0      3\n",
       "18287.0     42\n",
       "U            0\n",
       "Name: Date, Length: 4339, dtype: int64"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 每位用户最近购买时间于目标时间的距离\n",
    "value_R = (newest_time_consume - customer_newest_consume).dt.days\n",
    "value_R"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "b8ddb696",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CustomerID\n",
       "12346.0       1\n",
       "12347.0       7\n",
       "12348.0       4\n",
       "12349.0       1\n",
       "12350.0       1\n",
       "           ... \n",
       "18281.0       1\n",
       "18282.0       2\n",
       "18283.0      16\n",
       "18287.0       3\n",
       "U          1428\n",
       "Name: InvoiceNo, Length: 4339, dtype: int64"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# nunique()去重\n",
    "value_F = df3.groupby('CustomerID')['InvoiceNo'].nunique()\n",
    "value_F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "id": "5f1f6d89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CustomerID\n",
       "12346.0    7.718360e+04\n",
       "12347.0    4.310000e+03\n",
       "12348.0    1.797240e+03\n",
       "12349.0    1.757550e+03\n",
       "12350.0    3.344000e+02\n",
       "               ...     \n",
       "18281.0    8.082000e+01\n",
       "18282.0    1.780500e+02\n",
       "18283.0    2.045530e+03\n",
       "18287.0    1.837280e+03\n",
       "U          1.754902e+06\n",
       "Name: amount, Length: 4339, dtype: float64"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "value_M = df3.groupby('CustomerID')['amount'].sum()\n",
    "value_M"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c309d27",
   "metadata": {},
   "source": [
    "## 8.2.2 观察R,F,M的数据分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "1a2dd34e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    4339.000000\n",
       "mean       92.038258\n",
       "std       100.010502\n",
       "min         0.000000\n",
       "25%        17.000000\n",
       "50%        50.000000\n",
       "75%       141.500000\n",
       "max       373.000000\n",
       "Name: Date, dtype: float64"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "value_R.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "6e89c6f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(value_R, bins=30)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "0c20f06b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    4.339000e+03\n",
       "mean     2.452537e+03\n",
       "std      2.808589e+04\n",
       "min      3.750000e+00\n",
       "25%      3.065050e+02\n",
       "50%      6.685800e+02\n",
       "75%      1.660890e+03\n",
       "max      1.754902e+06\n",
       "Name: amount, dtype: float64"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "value_M.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "adbeca79",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaUAAAEWCAYAAADGjIh1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAdwklEQVR4nO3df1SW9f3H8RfeBKRyBM05/MEvZWFBRqKOMfGA54RRY2OVMuZp6ZBVO9XJpTGNmXmftuaPOmh6bLPTcVogtJPN1QZzc4C21OIeMSLvUtpSmNJ2r5tApOT7h4frKwk3v+Vz6/Nxjud4X+/ruu/3hw9cL+77+oGPy+VqFwAABhgx3A0AANCBUAIAGINQAgAYg1ACABiDUAIAGINQAgAYg1ACABiDUAIAGOOKDyWn0zncLQyIt/cvMQYTeHv/EmMwweXo/4oPJQCA9yCUAADGIJQAAMYglAAAxiCUAADGIJQAAMYglAAAxiCUAADG8B3uBobarIqRUsXJXq3rWjJpiLsBAHjCOyUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMfoUSnfeead2794tSaqpqVFycrLCwsKUl5en9vZ2a72KigrNnj1bkZGR2rJlS6fn2Lt3r2JiYhQdHa3i4uJBGAIA4ErR61Das2eP9u/fL0lqbW1VZmam4uPjdeDAAdXU1Fhh1djYqKysLGVmZqqkpEQFBQUqKyuTdCHIcnJytGrVKhUXF8tut8vpdA7BsAAA3qhXofTf//5Xjz/+uKKioiRJpaWlamlpkd1uV0REhNasWaNdu3ZJuhBeoaGhWr58uaZNm6bc3FyrtnPnTs2fP19ZWVmKiYlRTk6OCgsLh2hoAABv06tQWr16te644w7Fx8dLkqqrqzVnzhz5+/tLkmJjY1VbW2vVkpKSrG3j4+PlcDh6rAEA0GMolZWVqaysTGvXrrWWud1uhYWFWY99fHxks9nkcrkuqQUGBqqhoaHL7QIDA1VfXz8oAwEAeD+Pf+Tv7NmzeuSRR7Rx40YFBgb+/0a+vrLZbJ3WDQgIUHNzs3x9fa13UBcv79juy7WWlhaPDQ78mNPIXq9p6vEtU/vqC8Yw/Ly9f4kxmGCg/XccBuqOx1Bav369brnlFqWmpnZaHhwcrOPHj3da5na75efnp+DgYDU2Nl6yvGO77mr9HUCPevlXZwfltYaA0+k0sq++YAzDz9v7lxiDCS5H/x5DqaioSJ988olCQ0MlSS0tLXr11VclSeHh4dZ6dXV1OnfunIKDgxUXF6d9+/ZZtaqqKoWEhEiS4uLidOTIES1cuPCSGgAAHo8pvfHGGzp06JDKy8tVXl6u2267TatWrdLRo0d15swZFRUVSZI2bdqkefPmyWazKS0tTeXl5Tp48KDa2tqUn5+vlJQUSVJ6eroKCwt17NgxNTU1afv27VYNAACP75QmTZrU6fGoUaM0duxYTZo0Sfn5+crOzlZubq58fHysd0fjxo2T3W5XRkaGRo4cqTFjxmjr1q2SLpylt2zZMs2dO1d+fn6aOnWqsrOzh2hoAABv4zGUvmzbtm3W/9PS0lRZWSmHw6FZs2Zp7NixVm3p0qVKSUmR0+lUQkKCRo8ebdXy8vJ09913q76+XomJiT0eUwIAXD36FEpfNmHChEtOgugQHh7e6bjTxaKjoxUdHT2QlwYAXIG4ISsAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYhBIAwBiEEgDAGIQSAMAYvQ4ll8ulo0ePyuVyDWE7AICrWa9C6ZVXXtFNN92khx56SNOnT9err74qSaqpqVFycrLCwsKUl5en9vZ2a5uKigrNnj1bkZGR2rJlS6fn27t3r2JiYhQdHa3i4uLBGw0AwKv1GEr/+c9/tHLlSpWUlOjQoUNav369Hn/8cbW2tiozM1Px8fE6cOCAampqtHv3bklSY2OjsrKylJmZqZKSEhUUFKisrEzShSDLycnRqlWrVFxcLLvdLqfTObSjBAB4hR5Dye126+mnn1Z0dLQk6eabb9Ynn3yi0tJStbS0yG63KyIiQmvWrNGuXbskSXv27FFoaKiWL1+uadOmKTc316rt3LlT8+fPV1ZWlmJiYpSTk6PCwsIhHCIAwFv0GEphYWG66667JEltbW3avHmz7rjjDlVXV2vOnDny9/eXJMXGxqq2tlaSVF1draSkJOs54uPj5XA4eqwBAK5uvr1d0eFwKCMjQ9dcc40OHz6s9evXKywszKr7+PjIZrPJ5XLJ7XZrxowZVi0wMFANDQ2SLrzzuni7wMBA1dfXd/u6A/9ob2Sv1zT1Y0RT++oLxjD8vL1/iTGYYKD9R0VFeaz3OpRuuukm/fa3v9Xq1av10EMPKSIiQjabrdM6AQEBam5ulq+vr/UO6uLlkrqstbS09HsAPao42etVB/xaQ8DpdBrZV18whuHn7f1LjMEEl6P/Xp8SPmLECMXFxen555/Xa6+9puDgYDU2NnZax+12y8/P75Jax3JJHmsAgKtbj6G0f/9+rVu3znrs5+cnHx8fRUZG6siRI9byuro6nTt3TsHBwYqLi+tUq6qqUkhIiCR5rAEArm49hlJUVJS2b9+uXbt26eOPP9YTTzyh5ORkpaWl6cyZMyoqKpIkbdq0SfPmzZPNZlNaWprKy8t18OBBtbW1KT8/XykpKZKk9PR0FRYW6tixY2pqatL27dutGgDg6tZjKIWGhuqFF15Qfn6+EhIS9Nlnn+n555+Xr6+v8vPz9fDDD2vq1Kl6/fXXtXbtWknSuHHjZLfblZGRoaioKDmdTq1YsULShbP0li1bprlz52r69Omy2WzKzs4e2lECALxCr050uPXWW3XrrbdesjwtLU2VlZVyOByaNWuWxo4da9WWLl2qlJQUOZ1OJSQkaPTo0VYtLy9Pd999t+rr65WYmMgxJQCApD6cfdedCRMmKDU1tctaeHi4wsPDu6xFR0dbF+QCACBxl3AAgEEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxehVKv//97zVjxgyNGzdOiYmJqqmpkSTV1NQoOTlZYWFhysvLU3t7u7VNRUWFZs+ercjISG3ZsqXT8+3du1cxMTGKjo5WcXHxIA4HAODNegylEydO6IEHHtDPfvYz1dbWKjY2Vg8++KBaW1uVmZmp+Ph4HThwQDU1Ndq9e7ckqbGxUVlZWcrMzFRJSYkKCgpUVlYm6UKQ5eTkaNWqVSouLpbdbpfT6RzaUQIAvEKPofT+++/riSee0J133qnx48dr2bJlqqysVGlpqVpaWmS32xUREaE1a9Zo165dkqQ9e/YoNDRUy5cv17Rp05Sbm2vVdu7cqfnz5ysrK0sxMTHKyclRYWHh0I4SAOAVegylBQsWaMmSJdbj2tpaRUZGqrq6WnPmzJG/v78kKTY2VrW1tZKk6upqJSUlWdvEx8fL4XD0WAMAXN18+7Ly559/rs2bN2vJkiU6deqUwsLCrJqPj49sNptcLpfcbrdmzJhh1QIDA9XQ0CBJcrvdnbYLDAxUfX19t6858I/2RvZ6TVM/RjS1r75gDMPP2/uXGIMJBtp/VFSUx3qfQmnDhg2SpOzsbD311FOy2Wyd6gEBAWpubpavr6/1Duri5ZK6rLW0tPR7AD2qONnrVQf8WkPA6XQa2VdfMIbh5+39S4zBBJej/16H0qFDh/Tcc8/pD3/4g/z9/RUcHKzjx493WsftdsvPz0/BwcFqbGy8ZLkkjzUAwNWtV6eE//Of/9SSJUv09NNP68Ybb5QkxcXF6ciRI9Y6dXV1OnfunIKDgy+pVVVVKSQkpMvtLq4BAK5uPYZSS0uLFi1apNTUVKWnp6upqUlNTU36xje+oTNnzqioqEiStGnTJs2bN082m01paWkqLy/XwYMH1dbWpvz8fKWkpEiS0tPTVVhYqGPHjqmpqUnbt2+3agCAq1uPH9/9+c9/1nvvvaf33ntPO3futJb//e9/V35+vrKzs5WbmysfHx/t27dPkjRu3DjZ7XZlZGRo5MiRGjNmjLZu3Srpwll6y5Yt09y5c+Xn56epU6cqOzt7iIYHAPAmPYbS7bffLpfL1WUtLCxMlZWVcjgcmjVrlsaOHWvVli5dqpSUFDmdTiUkJGj06NFWLS8vT3fffbfq6+uVmJjIMSUAgKQ+nn3XlQkTJig1NbXLWnh4uMLDw7usRUdHKzo6eqAvDwC4gnBDVgCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMXodSmfPnlVycrLKy8utZSdPnlR6erqmTJmi++67T62trVatpqZGycnJCgsLU15entrb261aRUWFZs+ercjISG3ZsmWQhgIA8Ha9CqXm5mbde++9qqys7LR8yZIlCgoKUllZmUaMGKGNGzdKklpbW5WZman4+HgdOHBANTU12r17tySpsbFRWVlZyszMVElJiQoKClRWVjbIwwIAeKNehdKjjz6q66+/XpMnT7aWVVVVqbKyUhs3blRERITWrVunl19+WZJUWlqqlpYW2e12RUREaM2aNdq1a5ckac+ePQoNDdXy5cs1bdo05ebmWjUAwNWtV6G0cuVKrV27Vj4+Ptay6upqTZ8+XePHj5ckjRs3Tv7+/jp9+rSqq6s1Z84c+fv7S5JiY2NVW1trbZeUlGQ9T3x8vBwOx2CNBwDgxXx7s1J4ePgly9xut8LCwjotCwwMVH19/SU1Hx8f2Ww2uVwuud1uzZgxo9M2DQ0N3b620+nsTYsejOz1mgN/raFhal99wRiGn7f3LzEGEwy0/6ioKI/1XoVSlxv6+lrvhDoEBASopaVFvr6+stlsl9Sam5sv2a5jeXd6GkCPKk72etUBv9YQcDqdRvbVF4xh+Hl7/xJjMMHl6L/fp4QHBwersbGx0zK32y0/P78+1TqWAwDQ71C65ZZb5HA41NbWJunCKeNOp1MhISGKi4vTkSNHrHXr6up07tw5BQcHX1KrqqpSSEjIAIYAALhS9DuUwsPDFRoaqs2bN0uSNm/erKlTpyokJESJiYk6c+aMioqKJEmbNm3SvHnzZLPZlJaWpvLych08eFBtbW3Kz89XSkrK4IwGAODV+n1MSboQNgsXLtRzzz2ns2fPqqCg4MKT+voqPz9f2dnZys3NlY+Pj/bt2yfpwll6drtdGRkZGjlypMaMGaOtW7cOfCQAAK/Xp1B69913Oz2Oj4/XO++8o8OHDysmJkYTJ060amlpaaqsrJTD4dCsWbM0duxYq7Z06VKlpKTI6XQqISFBo0ePHuAwAABXggG9U5KkoKAg3XrrrV3WJkyYoNTU1C5r4eHhXZ5qDgC4enFDVgCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDEIJQCAMQglAIAxCCUAgDGGLZRqamqUnJyssLAw5eXlqb29fbhaAQAYYlhCqbW1VZmZmYqPj9eBAwdUU1Oj3bt3D0crAACDDEsolZaWqqWlRXa7XREREVqzZo127do1HK0AAAzi43K5LvvnZr/4xS9UXV1tBVF7e7siIiJUV1d3uVsBABhkWN4pud1uhYWFWY99fHxks9nkcrmGox0AgCGGJZR8fX3l7+/faVlAQICam5uHox0AgCGGJZSCg4PV2NjYaZnb7Zafn99wtAMAMMSwhFJcXJyOHDliPa6rq9O5c+cUHBw8HO0AAAwxLKGUmJioM2fOqKioSJK0adMmzZs3TzabbTjaATAMzp49q+TkZJWXl/dq/bfeeksJCQm67rrrFBcXp4qKCqu2ceNGBQUFWf/GjRs3VG1fcfoyD+Xl5Z2+zh3/7r//fkmDMw/DdkwpPz9fDz/8sKZOnarXX39da9eu7XG7/lxwW1FRodmzZysyMlJbtmzpVNu7d69iYmIUHR2t4uLifo+nL/ozhhdffFHXX3+9rrvuOt122206deqUVcvIyOj0TfDtb397KNvvV/+eevQ0P0Olr2P4+c9/3uUPYse1dZd7Djr0dad+8uRJpaena8qUKbrvvvvU2tpq1S73xezNzc269957VVlZ2av1//e//2nx4sW69957VVtbq4yMDGVnZ+v8+fOSpMrKSuXn56uurk51dXU6fvz4ULZv6esceNppe5qfodLXeUhISLC+xh3/Zs6cqXnz5kkanHkYtjs6pKWlqbKyUlu3btXhw4cVHR3tcf3+XHDb2NiorKwsZWZmqqSkRAUFBSorK5N04YcwJydHq1atUnFxsex2u5xO56CNb7DG8Oabb8put2vbtm169913FRAQoNWrV1t1h8Ohw4cPW98EL730klH9e+rR0/yYNIZHHnmk0w+hw+FQUFCQEhMTPY5vKPV1ZyJJS5YsUVBQkMrKyjRixAht3LhR0vBczP7oo4/q+uuv1+TJk3u1/gcffKCcnBz96Ec/0nXXXaf7779fDQ0N1i9olZWVSkpKsnb2Y8aMGcr2JfVvDjzttLubn6HU13nw9fXtFKrvvPOOmpubtXDhQkmDMw/Deu+7CRMmKDU1VWPHju1x3f5ccLtnzx6FhoZq+fLlmjZtmnJzc61tdu7cqfnz5ysrK0sxMTHKyclRYWHhoIxrMMfw4Ycf6plnnlFKSopCQkJ0zz33WD8EJ06c0KhRo/S1r33N+iYYNWqUUf176tHT/Jg0hoCAgE4/iDt37tR3v/tdhYeHX/Y56NDXnUlVVZUqKyu1ceNGRUREaN26dXr55ZclDc/F7CtXrtTatWvl4+PTq/VnzpypFStWWI9ra2s1atQoTZgwQQ0NDWpoaFBmZqa++tWvKjU1VdXV1UPVuqWvcyB1v9P2ND9Dqa/z8GXr16/XihUrNGLEiEGbB6+5IWt1dbXmzJljnUoeGxur2traHrdJSkqyHsfHx8vhcPRYGyr9GcPixYv1rW99y3pcW1uryMhISdLbb7+t1tZWTZ8+XZMmTdLSpUuH9Fqv/vTvqUdvmYOLuVwu7dixQz/5yU8kXf456NDXnUl1dbWmT5+u8ePHS5LGjRsnf39/nT59esBfk/4IDw8f0PbPPPOMFi9erGuuuUbvvfeeIiMj9ctf/lJvvfWWoqKitGTJksFp1IO+zoGnnban+RlKA5kHh8Ohjz76SOnp6ZI0aPPgNaHUnwtuv7xNYGCgGhoauq3V19cPfuMe+unrRcOffvqpfv3rX1sTfezYMd18880qKipSSUmJPvroIz3xxBND0PkF/enfU4+e5meoDHQOdu3apZSUFE2aNEnS5Z+DDn3dmXx53NL/f89728XsL730kqqrq/XYY49JkpKTk3XkyBElJSUpLCxMGzZs0Mcff6yqqqoh7aOvc+Bpp+1pfky1Y8cO3XPPPfL19ZU0ePPgOxTNDgVfX99Lzs7ruOA2KCio220uvkj34gt0u6q1tLQMfuNf6qevY7hYbm6uYmNjrXdOq1at6lR/8skn9b3vfU/PPvvsYLXcSX/699Sjp/kZKgOdgx07dmjz5s3W48s9B/3V3QXrLS0tA/6aXE5Op1O5ubl68cUXu/3YPyAgwNqh33TTTZe5w+517LQ7bNiwQREREaqqqvI4PyZqbW3V3r17tX///m7X6e88eM07pf5ccPvlbS5e31NtqAzkouHi4mKVlJRo27Zt3a4zfvx4ffrpp/rss88G3GtXBuOi54t79LY5OHLkiM6ePWud4NCVoZ6D/vI0bm+5mN3lcmnx4sV64IEHlJKSYi1/5plntH37dutxXV2dTp8+rSlTpgxHm7128U7bW+agQ2lpqSZNmqSoqChr2WDNg9eEUn8uuP3yNlVVVQoJCemxNlT6e9Gww+HQ8uXLtWPHjk49Llq0qNMxmMOHD2vs2LFDdqC9P/176tGb5kCSXnnlFd1xxx2djiFc7jnor1tuuUUOh0NtbW2SLpzK7HQ6FRISYtTF7E1NTV2eCn3+/Hn94Ac/0OTJk/XjH/9YTU1Nampq0hdffKEZM2Zow4YNKikpUXl5ubKzs5WYmKgbbrjhsvfviaedtqf5GQ7dzUOHP/3pT52OB0satHnwmlDydMGty+XSF198cck2aWlpKi8v18GDB9XW1qb8/HzrN6z09HQVFhbq2LFjampq0vbt2zv99mXKGM6cOaNFixbpwQcf1MyZM60fRkm68cYbtXLlSv3tb3/Ta6+9prVr12rZsmVG9e+pR0/zY9IYOnT1g3i556An3e1MwsPDFRoaan30uHnzZk2dOlUhISFGXcy+aNEiPf/885cs/8c//qG//vWv2r9/v6ZMmaLJkydr8uTJOnTokFJSUvTQQw/p/vvv1/e//31NmzZNv/nNby577x26mwNPO21P8zMcupuHDmVlZUpISOi0bLDmYVj+dEV/vf7668rOzta1114rHx8f7du3T9HR0QoKCtJf/vIXxcXFXbLNCy+8oNzcXI0cOVJjxoxRaWmpvvKVr0iS1q1bpy1btsjPz09Tp07VG2+8oWuvvdaoMWzbtk0//elPL3kel8uls2fP6uGHH9a+ffsUGBioH/7wh3rkkUesA48m9N9Tj57mx5QxSNKpU6d0ww03yOl0WmdI9WZ8Qy02NlZbt27V3LlzJUm33367FixYoAcffPCSdY8ePaqFCxfKx8dHZ8+eVUFBgbVdd18T9Kwvc7B582Y9++yzamtrU1pamp566inr2Jin+bmaeFUoSdK///1vORwOzZo1q1fXN0kX3iY7nU4lJCRo9OjRnWq1tbWqr69XYmLiZfv8tj9jMMlg9+9pfoaKt89Bf7lcLh0+fFgxMTGaOHFip9rV+jUxiaf5uVp4XSgBAK5cXnNMCQBw5SOUAADGIJQAAD3q6x3RO+zYsUPf/OY3PZ7ZejGvuaMDAGB4NDc3a+nSpX26I7p04X5/Tz75pAoLC3t9iQHvlAAAHvXnjuiS9Nhjj2nBggX6+te/3uttCCUAgEfd3RH9xIkTysjIUGhoqBYsWKATJ05YtZKSEv3ud7/TzJkz9eqrr8rtdvfqtQglAIBHXd0R/fPPP1dmZqYmTpyoQ4cOKTo62rrr+fnz55WXl6dJkybp9OnTKioqUmJiYq/+CgDHlAAAfXb06FF98MEH+uMf/6igoCCtWLFCN954o+rr63X8+HG9//77evPNNzV9+nRJ0ne+8x1t3bpVTz75pMfnJZQAAH126tQpnT9//pI/S/Hxxx/r1KlTmjx5shVI0oV7/3344Yc9Pi+hBADos4kTJ2r8+PEqLS21lrndboWHh+vcuXNqbW1Ve3u7dRzqX//6V69uMMsxJQBAn8XHxys4OFj79u2Tv7+/3n33XaWkpOiTTz7R7Nmzde2118put+vkyZN65ZVXtG/fPt111109Pi+hBADoM19fXxUUFKi0tFTx8fFau3atfvWrXyksLEzXXHONioqK9Pbbb2v27NlavXq1nn76ac2ZM6fH5+WGrAAAY/BOCQBgDEIJAGAMQgkAYAxCCQBgDEIJAGAMQgkAYAxCCQBgDEIJAGCM/wM3e8JqW/5OFgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 异常值严重影响了数据的分布\n",
    "plt.hist(value_M, bins=30)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "bbc762e8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制金额小于2000的\n",
    "plt.hist(value_M[value_M < 2000], bins=30)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "9e749f23",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    4339.000000\n",
       "mean        4.600138\n",
       "std        22.943499\n",
       "min         1.000000\n",
       "25%         1.000000\n",
       "50%         2.000000\n",
       "75%         5.000000\n",
       "max      1428.000000\n",
       "Name: InvoiceNo, dtype: float64"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 中位数是2，而最大值是1428，异常值很严重\n",
    "value_F.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "28d9f17c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaUAAAEHCAYAAAAOBllLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAip0lEQVR4nO3df1Db933H8acsGTA2MYK4FNsggc2cLOZcYtke9hUKu4aM9Nj5vDqc60uMS5o4uSypj3raVkpSc03TGrID22m7uD9SSIjZZduZpDuTdBRwuthZxIgqq1PrsGSOmaE3WnH8TM3+8KwGg0GWAH1FXo8730Wfz+f7/b4/3y/5vu4rffWVaWBgYAIREREDWBLpAkRERK5RKImIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGIZCSUREDEOhJCIihqFQmmM+ny/SJYQlmutX7ZETzfVHc+0Q/fVfT6EkIiKGoVASERHDUCiJiIhhKJRERMQwFEoiImIYCiURETEMhZKIiBiGQklERAzDEukC5lviDy4GPXagbM08ViIiIrPRlZKIiBiGQklERAxDoSQiIoahUBIREcNQKImIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGEbQoTQyMkJBQQEdHR3T9j/++OM89dRTgdcXL16kpKSEtLQ0HnroIUZHRwN9Ho+HgoICbDYblZWVTExMhDEFERFZLIIKpaGhIfbt24fL5Zq2/+c//zk/+tGPJrWVlZWRmJhIe3s7S5YsoaamBoDR0VFKS0txOBy0tbXh8XhobGwMcxoiIrIYBBVKFRUVbNiwgbVr107pGxsb4/HHH+eP/uiPAm3d3d24XC5qamrIyMjg8OHDvPjiiwC0trYyPDxMdXU1GRkZVFVV0dDQMEfTERGRaBbUA1kPHTqE3W7n5ZdfntJXW1tLWloamzdvDrS53W5uv/12Vq1aBUBycjKxsbFcvnwZt9vNtm3biI2NBSA7Oxuv1zsXcxERkSgXVCjZ7fZp2//zP/+Tv//7v6etrW3S1Y7f78dms00am5CQwKVLl6b0mUwmzGYzAwMDJCYmTrsdn88XTJk3EB/0yPC2M/friZRorl+1R0401x/NtUN01Z+VlTVjf8g/XTExMcHjjz+O0+kkLS1t8kotlsCV0DVxcXEMDw9jsVgwm81T+oaGhm4YSrNNYkadwf90RVjb+X8+n29O1hMp0Vy/ao+caK4/mmuH6K//eiHfEv78888zMTFBeXn5lD6r1Up/f/+kNr/fT0xMzIx9IiLy8RbylVJzczNdXV2Bt+Ku3fJ96tQpXnjhBQ4ePMj4+DhLly5lZGQEn89HamoqOTk5vPTSS4H19PT0MDY2htVqDXMqIiIS7UIOpRMnTjAyMhJ4/eyzzwLw6KOPsmbNGtLT06mvr+fgwYPU19ezbt06UlNTWbVqFX19fTQ3N/P5z3+e2tpa8vPzp7ylJyIiHz8hh1JKSsqk1ytXrgRgzZqrPyleW1vL7t27OXbsGCMjIzQ1NV3doMVCXV0d5eXlOJ1OTCYTLS0toZYhIiKLyE2F0jvvvHPDvr/+67+e9NrhcPD2229z9uxZNm7cyOrVqwN9xcXFuFwuurq62LJlC0lJSTdZtoiILEYhXykFIzExkbvuumvavpSUFIqKiuZz8yIiEmX0QFYRETEMhZKIiBiGQklERAxDoSQiIoahUBIREcNQKImIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGIZCSUREDEOhJCIihqFQEhERw1AoiYiIYSiURETEMBRKIiJiGAolERExjKBDaWRkhIKCAjo6OgJtb775Jrm5udx6663k5OTQ2dkZ6Lt48SIlJSWkpaXx0EMPMTo6GujzeDwUFBRgs9morKxkYmJijqYjIiLRLKhQGhoaYt++fbhcrkDbb3/7W/bu3cu+ffvwer3s3LmT8vJyrly5AkBZWRmJiYm0t7ezZMkSampqABgdHaW0tBSHw0FbWxsej4fGxsZ5mJqIiESboEKpoqKCDRs2sHbt2kDbr371K770pS/x4IMPcuutt3LgwAF6e3v54IMP6O7uxuVyUVNTQ0ZGBocPH+bFF18EoLW1leHhYaqrq8nIyKCqqoqGhob5mZ2IiEQVSzCDDh06hN1u5+WXXw60bd68mc2bNwdee71eli9fTkpKCu3t7dx+++2sWrUKgOTkZGJjY7l8+TJut5tt27YRGxsLQHZ2Nl6vdy7nJCIiUSqoKyW73T7rmGeeeYa9e/eydOlS/H4/NpttUn9CQgKXLl2a0mcymTCbzQwMDNxU4SIisvgEdaU0mxdeeAG3281zzz13daUWS+BK6Jq4uDiGh4exWCyYzeYpfUNDQyQmJk67fp/PF0Z18UGPDG87c7+eSInm+lV75ERz/dFcO0RX/VlZWTP2hx1KPp8Pp9PJD3/4Q5KSkgCwWq309/dPGuf3+4mJicFqtXLhwoVp+25ktknMqPNi0EPD2s7/8/l8c7KeSInm+lV75ERz/dFcO0R//dcL63tKAwMD7N27l4cffpjCwsJA+5133klXVxfj4+PA1dvJfT4fqamp5OTkcO7cucDYnp4exsbGsFqt4ZQiIiKLQMihdOXKFe6//37Wrl3LI488wuDgIIODg/z+97/HbreTnp5OfX09APX19axbt47U1FR27NhBX18fzc3NANTW1pKfnz/lLT0REfn4Cfntu1/84hf87Gc/AyAtLS3QfurUKT796U9TW1vL7t27OXbsGCMjIzQ1NV3doMVCXV0d5eXlOJ1OTCYTLS0tYU5DREQWg5sKpXfeeSfw39nZ2TPeMedwOHj77bc5e/YsGzduZPXq1YG+4uJiXC4XXV1dbNmyJfBZlIiIfLzNyd13N5KYmMhdd901bV9KSgpFRUXzuXkREYkyeiCriIgYhkJJREQMQ6EkIiKGoVASERHDUCiJiIhhKJRERMQwFEoiImIYCiURETEMhZKIiBiGQklERAxDoSQiIoahUBIREcNQKImIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGIZCSUREDCPoUBoZGaGgoICOjo5A28WLFykpKSEtLY2HHnqI0dHRQJ/H46GgoACbzUZlZSUTExOBvs7OTrZu3UpmZiZHjx6do6mIiEi0CyqUhoaG2LdvHy6Xa1J7WVkZiYmJtLe3s2TJEmpqagAYHR2ltLQUh8NBW1sbHo+HxsZGAPr7+9mzZw+lpaWcPn2apqYm2tvb53haIiISjYIKpYqKCjZs2MDatWsDbd3d3bhcLmpqasjIyODw4cO8+OKLALS2tjI8PEx1dTUZGRlUVVXR0NAAwMmTJ0lPT+fgwYOsX78ep9MZ6BMRkY+3oELp0KFDPPnkk5hMpkCb2+3m9ttvZ9WqVQAkJycTGxvL5cuXcbvdbNu2jdjYWACys7Pxer2B5fLy8gLrcTgcdHV1zdV8REQkilmCGWS326e0+f1+bDbbpLaEhAQuXbo0pc9kMmE2mxkYGMDv97Np06ZJy/T29s64fZ/PF0yZNxAf9MjwtjP364mUaK5ftUdONNcfzbVDdNWflZU1Y39QoTTtghZL4Eromri4OIaHh7FYLJjN5il9Q0NDU5a71j6T2SYxo86LQQ8Nazv/z+fzzcl6IiWa61ftkRPN9Udz7RD99V8v5FvCrVYr/f39k9r8fj8xMTE31XetXUREJORQuvPOO+nq6mJ8fBy4esu4z+cjNTWVnJwczp07Fxjb09PD2NgYVqt1Sl93dzepqalhTEFERBaLkEPJbreTnp5OfX09APX19axbt47U1FR27NhBX18fzc3NANTW1pKfn4/ZbKa4uJiOjg7OnDnD+Pg4dXV1FBYWzs1sREQkqoX8mRJcDZvdu3dz7NgxRkZGaGpqurpSi4W6ujrKy8txOp2YTCZaWlqAq3fpVVdXs3PnTuLj41m5ciXHjx8PfyYiIhL1biqU3nnnnUmvHQ4Hb7/9NmfPnmXjxo2sXr060FdcXIzL5aKrq4stW7aQlJQU6Nu/fz+FhYX4fD5yc3NZsWJFmNMQEZHFIKwrJYDExETuuuuuaftSUlIoKiqats9ut097q7mIiHx86YGsIiJiGAolERExDIWSiIgYhkJJREQMQ6EkIiKGoVASERHDUCiJiIhhKJRERMQwFEoiImIYCiURETEMhZKIiBiGQklERAxDoSQiIoahUBIREcNQKImIiGEolERExDAUSiIiYhhh//LsYpL4g4tBjx0oWzOPlYiIfDyFfaXU0NDAxo0bSU1N5bOf/Sznz58HwOPxUFBQgM1mo7KykomJicAynZ2dbN26lczMTI4ePRpuCSIiskiEFUrvvvsu3/zmN2loaOCtt97iU5/6FF/84hcZHR2ltLQUh8NBW1sbHo+HxsZGAPr7+9mzZw+lpaWcPn2apqYm2tvb52QyIiIS3cIKpe7ubhwOB5/61KdYs2YNZWVlvPvuu7S2tjI8PEx1dTUZGRlUVVXR0NAAwMmTJ0lPT+fgwYOsX78ep9MZ6BMRkY+3sEJpw4YNdHR00N3djd/v57vf/S6f+cxncLvdbNu2jdjYWACys7Pxer0AuN1u8vLyAutwOBx0dXWFU4aIiCwSYd3ocNttt1FSUhIImZSUFF5//XWeffZZbDZbYJzJZMJsNjMwMIDf72fTpk2BvoSEBHp7e2fcjs/nC6PK+DCWvbGZagqv3siL5vpVe+REc/3RXDtEV/1ZWVkz9ocVSv/+7//OT37yE06fPs1tt93G8ePH2bVrF4WFhSxbtmzS2Li4OIaGhrBYLIErqI+2z2S2ScyoM/g76m7GjWry+Xzh1Rth0Vy/ao+caK4/mmuH6K//emG9ffcP//AP7Nq1i61bt3LLLbfgdDoZGBggJSWF/v7+SWP9fj8xMTFYrdZJfdfaRUREwgqlK1eu0NfXF3g9NDTE4OAgOTk5nDt3LtDe09PD2NgYVqt1Sl93dzepqanhlCEiIotEWKG0fft2WlpaOHr0KM3NzXzhC18gPj6ezZs309fXR3NzMwC1tbXk5+djNpspLi6mo6ODM2fOMD4+Tl1dHYWFhXMyGRERiW5hfaZUUlKCz+fje9/7Hr29vaxfv56GhgZWrFhBXV0d5eXlOJ1OTCYTLS0tACQnJ1NdXc3OnTuJj49n5cqVHD9+fE4mIyIi0S2sUDKZTFRUVFBRUTGlr7i4GJfLRVdXF1u2bCEpKSnQt3//fgoLC/H5fOTm5rJixYpwyhARkUViXp99l5KSQlFR0bR9drsdu90+n5sXEZEoo6eEi4iIYSiURETEMBRKIiJiGAolERExDIWSiIgYhkJJREQMQ6EkIiKGoVASERHDUCiJiIhhKJRERMQwFEoiImIYCiURETEMhZKIiBiGQklERAxDoSQiIoahUBIREcNQKImIiGEolERExDDmLJSqqqq49957A689Hg8FBQXYbDYqKyuZmJgI9HV2drJ161YyMzM5evToXJUgIiJRbk5Cye12c+LECZ5++mkARkdHKS0txeFw0NbWhsfjobGxEYD+/n727NlDaWkpp0+fpqmpifb29rkoQ0REolzYoXTlyhUef/xxDhw4gN1uB6C1tZXh4WGqq6vJyMigqqqKhoYGAE6ePEl6ejoHDx5k/fr1OJ3OQJ+IiHy8hR1K3//+9zl//jzp6em8+uqrjI6O4na72bZtG7GxsQBkZ2fj9XqBq1dVeXl5geUdDgddXV3hliEiIouAJZyFBwcHeeqpp7DZbLz//vu89NJLPP3002zfvh2bzRYYZzKZMJvNDAwM4Pf72bRpU6AvISGB3t7eGbfj8/nCqDI+jGVvbKaawqs38qK5ftUeOdFcfzTXDtFVf1ZW1oz9YYXSqVOnGBoa4tSpUyQnJ/Phhx+yfft2Tp48yf333z9pbFxcHENDQ1gslsAV1EfbZzLbJGbUeTH0ZWdwo5p8Pl949UZYNNev2iMnmuuP5toh+uu/Xlhv333wwQfk5OSQnJwMgMVi4Y477uA3v/kN/f39k8b6/X5iYmKwWq2T+q61i4iIhBVKq1evZnh4eFLb+++/z+HDhzl37lygraenh7GxMaxWKzk5OZP6uru7SU1NDacMERFZJMIKpaKiIn7961/z3HPPcfHiRb7zne/wzjvvcM8999DX10dzczMAtbW15OfnYzabKS4upqOjgzNnzjA+Pk5dXR2FhYVzMhkREYluYX2mlJSUxMmTJ6msrKSyspJPfOITnDhxgszMTOrq6igvL8fpdGIymWhpaQEgOTmZ6upqdu7cSXx8PCtXruT48eNzMhkREYluYYUSwJ/8yZ/Q2to6pb24uBiXy0VXVxdbtmwhKSkp0Ld//34KCwvx+Xzk5uayYsWKcMsQEZFFIOxQmklKSgpFRUXT9tnt9sCXbUVEREAPZBUREQNRKImIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGMa83hIuf5D4g+AfDDtQtmYeKxERMS5dKYmIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGIZCSUREDEOhJCIihqFQEhERw1AoiYiIYSiURETEMBRKIiJiGHMWSrt27aKxsREAj8dDQUEBNpuNyspKJiYmAuM6OzvZunUrmZmZHD16dK42LyIii8CchNLJkyd5/fXXARgdHaW0tBSHw0FbWxsejycQVv39/ezZs4fS0lJOnz5NU1MT7e3tc1GCiIgsAmGH0v/+7//y1a9+laysLABaW1sZHh6murqajIwMqqqqaGhoAK6GV3p6OgcPHmT9+vU4nc5An4iISNih9Ld/+7d87nOfw+FwAOB2u9m2bRuxsbEAZGdn4/V6A315eXmBZR0OB11dXeGWICIii0RYv6fU3t5Oe3s7P//5zzl06BAAfr8fm80WGGMymTCbzQwMDOD3+9m0aVOgLyEhgd7e3lm34/P5wqgyPoxlb2ymmqbvC76O8OYbvkhvPxyqPXKiuf5orh2iq/5r76rdSMihNDIywpe//GVqampISEj4wwotFsxm86SxcXFxDA0NYbFYAldQH22fzWyTmFFn8D+udzNuVJPP55u+7ybqCGu+Ybph/VFAtUdONNcfzbVD9Nd/vZBD6dvf/jZ33nknRUVFk9qtVisXLlyY1Ob3+4mJicFqtdLf3z+lXcKjX7UVkcUi5FBqbm7mN7/5Denp6QAMDw/zT//0TwDY7fbAuJ6eHsbGxrBareTk5NDS0hLo6+7uJjU1NdQSRERkkQn5Roef/OQnvPHGG3R0dNDR0cGf/dmf8Td/8ze89dZb9PX10dzcDEBtbS35+fmYzWaKi4vp6OjgzJkzjI+PU1dXR2Fh4ZxNRkREolvIV0pr1kx+G2j58uUkJSWxZs0a6urqKC8vx+l0YjKZAldHycnJVFdXs3PnTuLj41m5ciXHjx8PbwYiIrJohHX33Uc9++yzgf8uLi7G5XLR1dXFli1bSEpKCvTt37+fwsJCfD4fubm5rFixYq5KEBGRKDdnoXS9lJSUKTdBXGO32yd97iQiIgJ6IKuIiBiIQklERAxDoSQiIoahUBIREcNQKImIiGEolERExDAUSiIiYhgKJRERMQyFkoiIGIZCSUREDEOhJCIihqFQEhERw1AoiYiIYSiURETEMBRKIiJiGPP2e0piTIk/uDjLiHjovDpmoGzNLGNFROaWrpRERMQwwg6lV155hU2bNpGcnMyOHTvweDwAeDweCgoKsNlsVFZWMjExEVims7OTrVu3kpmZydGjR8MtQUREFomwQundd9/l4Ycf5mtf+xper5fs7GweffRRRkdHKS0txeFw0NbWhsfjobGxEYD+/n727NlDaWkpp0+fpqmpifb29jmZjIiIRLewQumXv/wlTzzxBLt27WLVqlU88MADuFwuWltbGR4eprq6moyMDKqqqmhoaADg5MmTpKenc/DgQdavX4/T6Qz0iYjIx1tYNzrcfffdk157vV4yMzNxu91s27aN2NhYALKzs/F6vQC43W7y8vICyzgcDr7+9a+HU4aIiCwSc3ajw4cffkh9fT1lZWX4/X5sNlugz2QyYTabGRgYmNKXkJBAb2/vXJUhIiJRbM5uCT9y5AgA5eXlfOMb38BsNk/qj4uLY2hoCIvFEriC+mj7THw+XxiVxYex7I3NVNP0fcHXcfPzXfg5GlU01nxNNNcO0V1/NNcO0VV/VlbWjP1zEkpvvPEGx44d41/+5V+IjY3FarVy4cKFSWP8fj8xMTFYrVb6+/untM9ktknMqHO27+WE5kY1+Xy+6ftuoo6bnu8Cz9Gobrjvo0A01w7RXX801w7RX//1wn777r333qOsrIynn36aO+64A4CcnBzOnTsXGNPT08PY2BhWq3VKX3d3N6mpqeGWISIii0BYoTQ8PMy9995LUVERJSUlDA4OMjg4yPbt2+nr66O5uRmA2tpa8vPzMZvNFBcX09HRwZkzZxgfH6euro7CwsI5mYyIiES3sN6+++lPf8r58+c5f/48zz//fKD9P/7jP6irq6O8vByn04nJZKKlpQWA5ORkqqur2blzJ/Hx8axcuZLjx4+HNwsxhNkfYfQHeoSRiEwnrFC65557GBgYmLbPZrPhcrno6upiy5YtJCUlBfr2799PYWEhPp+P3NxcVqxYEU4ZIiKySMzrA1lTUlIoKiqats9ut2O32+dz8yIiEmX0QFYRETEM/XSFRIXgPq+6+rMb+rxKJHrpSklERAxDoSQiIoahUBIREcNQKImIiGEolERExDAUSiIiYhi6JVwWHT3uSCR66UpJREQMQ6EkIiKGoVASERHD0GdKIjdBn1eJzC9dKYmIiGHoSknEALZ0Xn2YbLB0FSaLlUJJJArpbURZrBRKIjKJAk8iSZ8piYiIYUTsSsnj8fDII49w4cIF7rvvPr7+9a9jMpkiVY6IzLObuQKD+b0Km1zLzJ/n6WpwYUUklEZHRyktLaWoqIjvf//7VFRU0NjYyN69eyNRjogYkN5G/HiKSCi1trYyPDxMdXU1sbGxVFVVcejQIYWSiHyszGfwRmuomwYGBiYWeqPf/OY3cbvdNDQ0ADAxMUFGRgY9PT0LXYqIiBhIRG508Pv92Gy2wGuTyYTZbGZgYCAS5YiIiEFEJJQsFguxsbGT2uLi4hgaGopEOSIiYhARCSWr1Up/f/+kNr/fT0xMTCTKERERg4hIKOXk5HDu3LnA656eHsbGxrBarZEoR0REDCIiobRjxw76+vpobm4GoLa2lvz8fMxmcyTKCdorr7zCpk2bSE5OZseOHXg8nlmXeeyxx0hMTAz8y8nJWYBKF5fGxsZJ+/Dav6eeemrG5bTvQzcyMkJBQQEdHR2BtjfffJPc3FxuvfVWcnJy6OzsDGpdNTU1k45DcnLyfJW9KFy/7zs6Oqb9+z9w4MCs64rGfR+xz5Tq6up47LHHWLduHa+++ipPPvlkJEoJ2rvvvsvDDz/M1772NbxeL9nZ2Tz66KOzLudyuXj55Zfp6emhp6eH9vb2Bah2qlBO0B6Ph4KCAmw2G5WVlUxMLPiNmgB8/vOfD+y/np4efv3rX7N27Vry8/NnXC7S+366E/vFixcpKSkhLS2Nhx56iNHR0aDWtZDHYmhoiH379uFyuQJtv/3tb9m7dy/79u3D6/Wyc+dOysvLuXLlyqzrc7lc1NXVBY7DhQsX5q32a6bb96GeoEM9ZqGYbt/n5uZO+vvv6elh8+bNs/79Q2T2fbgi9pih4uJiXC4Xx48f5+zZs9x2222RKiUov/zlL3niiSfYtWsXq1at4oEHHpj0hzOdkZERLly4QG5ubuB/hISEhAWqeLKbPUFf+4Kzw+Ggra0Nj8dDY2PjAlU7WUxMzKSTyalTp7jtttvYvn37DZeJ9L6f7uQCUFZWRmJiIu3t7SxZsoSamppZ17XQx6KiooINGzawdu3aQNuvfvUrvvSlL/Hggw9y6623cuDAAXp7e/nggw9mXZ/L5SIvLy9wHFauXDlvtcON932oJ+hQjlmoptv3Fotl0t//22+/zdDQELt37551fQu97+dCRJ99l5KSQlFREUlJSZEsIyh33303ZWVlgdder5fMzMwZl+nu7sZkMpGbm8snP/lJ/uIv/oL3339/vkudIpQT9Ee/4JyRkUFVVVXge2WR9Pvf/56amhqcTueM4yK976c7uXR3d+NyuaipqSEjI4PDhw/z4osvzrquhT4Whw4d4sknn5z02K/Nmzfzla98JfDa6/WyfPlyUlJSZlxXb28vvb29lJaW8slPfpKioiLcbve81Q7T73sI7QQd6jEL1XT7/nrf/va3+cpXvsKSJTOfviOx7+eCHsgagg8//JD6+vpJITUdr9fLhg0beO655zhz5gxms5nHHntsgar8g1BO0G63m23btgVu3c/Ozsbr9S5EuTN65ZVX+MQnPoHD4ZhxXKT3/XQnF7fbze23386qVasASE5OJjY2lsuXL8+4roU+Fna7fdYxzzzzDHv37mXp0qUzjjt//jyZmZl861vf4s033yQrK2vW/2/CNd2+D/UEHeoxC9Vs+76rq4v/+q//oqSkZNZ1RWLfzwWFUgiOHDkCQHl5+Yzj7rvvPl577TUcDgfr1q3jyJEj/Ou//uuCf0k4lBO0Ub/gfOLECb74xS/OOi7S+366k8v1+xQgISGBS5cuzbguox2LF154AbfbzV/91V/NOragoIBz586Rl5eHzWbjyJEj/Pd//zfd3d3zVt90+z7UE3Sox2y+nDhxgvvuuw+LZfYnxEVi388FhdJNeuONNzh27BgnTpyY8gXg2axatYqJiYkF/4MO5QRtxC84X7p0ibNnz/K5z33uppeN1L7/qBvt0+Hh4ZCWi8Sx8Pl8OJ1OvvOd74T0tntcXFxETuqhnqBDPWbzYXR0lH/+539m165dIS0fqX1/sxRKN+G9996jrKyMp59+mjvuuGPW8RUVFbS0tARenz17FpPJNOW97oUWzAnaiF9w/sd//Efy8vK45ZZbZh1rxH0f6j41yrEYGBhg7969PPzwwxQWFga1zDPPPMN3v/vdwOuenh4uX75MWlrafJUZlGBP0EbZ93D1s8U1a9aQlZUV1Hij7vvZ6JdngzQ8PMy9995LUVERJSUlDA4OArB8+XL8fj/Lli2b8v76xo0beeKJJ7jlllsYHx/n0KFDlJaWLvgdeBUVFXzmM58JXGEEc4LOycnhpZdeCrw2whecX3vtNf70T/90Utvvfvc7Q+/7j7rzzjs5ePAg4+PjLF26lJGREXw+H6mpqTMuZ4RjceXKFe6//37Wrl3LI488Evj7X7ZsGWazmcHBQZYuXTrlqmLTpk08+OCDZGRksGzZMp588kl27NjBH//xHy9Y7XD1BB0fH8+DDz4IBH+CDvWYzYfXXnuNvLy8Ke1G3/c3S1dKQfrpT3/K+fPnef7551m7dm3g33vvvceOHTt49dVXpyxz//33U1RUxN69e3nggQf47Gc/G/g8aiFdO0G3t7fz+uuv8+Uvfzlwgv7d737H+Pj4lGWM9gXn8fFx/u3f/o3c3NxJ7Ubf9x9lt9tJT0+nvr4egPr6etatWxc4wRn5WPziF7/gZz/7Ga+//jppaWmBv/833ngDgHvvvZfvfe97U5YrLCzkL//yLzlw4ABf+MIXWL9+PT/+8Y8XrO5rNm3axJEjRzh9+jQdHR2Ul5dPOkEPDg5O+/2j2Y7ZQmpvb5/y9w/G3/c3KyI/XSELa2Jigq9+9av8+Mc/xmKxsHv3biorK1m+fDnZ2dlUV1fz53/+51OWe/XVVykvL2fZsmWYTCZaWloM/30yo8nOzub48eN8+tOfBuCtt95i9+7dmEwmRkZGaGpqCvTpWMyt6/d9fX09f/d3f8f4+DjFxcV84xvfCHwuds8993D33XdP+4X4mY6ZzD2Fkszof/7nf+jq6mLLli1R8X2yaDAwMMDZs2fZuHEjq1evDno5HYvICfWYyc1TKImIiGHoMyURETEMhZKIiBiGQklERAxDoSQiIoahUBIREcNQKImIiGH8HyHlAEz+bUJtAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(value_F[value_F < 20], bins=30)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7817f6e",
   "metadata": {},
   "source": [
    "## 8.2.3 对R,F,M分段（给予权重）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "e954eaec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " value_R:\t [0.0, 5.0, 12.0, 22.0, 32.0, 50.0, 71.0, 108.0, 179.0, 262.2000000000003, 373.0]\n",
      " value_F:\t [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 3.0, 4.0, 6.0, 9.0, 1428.0]\n",
      " value_M:\t [4, 155, 250, 350, 488, 669, 934, 1348, 2056, 3641, 1754902]\n"
     ]
    }
   ],
   "source": [
    "# 可根据分位数来分段\n",
    "print(' value_R:\\t', value_R.quantile([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]).tolist())\n",
    "print(' value_F:\\t', value_F.quantile([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]).tolist())\n",
    "print(' value_M:\\t', [round(i) for i in value_M.quantile([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]).tolist()])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "86bb51c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建分段指标\n",
    "bins_R = [0, 30, 90, 180, 360, 720]\n",
    "bins_F = [1, 2, 5, 10, 20, 5000]\n",
    "bins_M = [0, 500, 2000, 5000, 10000, 200000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "fa82d75d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分段，label可以理解为权重，对R而言，值越小表示里目标时间近，所占权重也就更大，F,M同理\n",
    "score_R = pd.cut(value_R, bins_R, labels=[5,4,3,2,1], right=False)\n",
    "score_F = pd.cut(value_F, bins_F, labels=[1,2,3,4,5], right=False)\n",
    "score_M = pd.cut(value_M, bins_M, labels=[1,2,3,4,5], right=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "01089fc8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CustomerID\n",
       "12346.0    2\n",
       "12347.0    5\n",
       "12348.0    4\n",
       "12349.0    5\n",
       "12350.0    2\n",
       "          ..\n",
       "18281.0    2\n",
       "18282.0    5\n",
       "18283.0    5\n",
       "18287.0    4\n",
       "U          5\n",
       "Name: Date, Length: 4339, dtype: category\n",
       "Categories (5, int64): [5 < 4 < 3 < 2 < 1]"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score_R"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "b58268c1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 横向合并，axis=1；纵向合并，axis=0(默认)\n",
    "rfm = pd.concat([score_R, score_F, score_M], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "fafacdc1",
   "metadata": {},
   "outputs": [],
   "source": [
    "rfm.rename(columns={'Date':'R_value', 'InvoiceNo':'F_value', 'amount':'M_value'}, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "e08fc0ea",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R_value</th>\n",
       "      <th>F_value</th>\n",
       "      <th>M_value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CustomerID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12346.0</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12347.0</th>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12348.0</th>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12349.0</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12350.0</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18281.0</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18282.0</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18283.0</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18287.0</th>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4339 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           R_value F_value M_value\n",
       "CustomerID                        \n",
       "12346.0          2       1       5\n",
       "12347.0          5       3       3\n",
       "12348.0          4       2       2\n",
       "12349.0          5       1       2\n",
       "12350.0          2       1       1\n",
       "...            ...     ...     ...\n",
       "18281.0          2       1       1\n",
       "18282.0          5       2       1\n",
       "18283.0          5       4       3\n",
       "18287.0          4       2       2\n",
       "U                5       5     NaN\n",
       "\n",
       "[4339 rows x 3 columns]"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# （U,M_value)为NaN原因是在对M分段指标构建时，最大值到20万，而U累计超过175万\n",
    "rfm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "d615066c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 4339 entries, 12346.0 to U\n",
      "Data columns (total 3 columns):\n",
      " #   Column   Non-Null Count  Dtype   \n",
      "---  ------   --------------  -----   \n",
      " 0   R_value  4339 non-null   category\n",
      " 1   F_value  4339 non-null   category\n",
      " 2   M_value  4336 non-null   category\n",
      "dtypes: category(3)\n",
      "memory usage: 176.3+ KB\n"
     ]
    }
   ],
   "source": [
    "rfm.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "680a4b0c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 转换类型用于计算\n",
    "for i in ['R_value', 'F_value', 'M_value']:\n",
    "    rfm[i] = rfm[i].astype(float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "fc564295",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R_value</th>\n",
       "      <th>F_value</th>\n",
       "      <th>M_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>4339.000000</td>\n",
       "      <td>4339.000000</td>\n",
       "      <td>4336.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.821618</td>\n",
       "      <td>2.028117</td>\n",
       "      <td>1.885609</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.174880</td>\n",
       "      <td>0.997989</td>\n",
       "      <td>0.951810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           R_value      F_value      M_value\n",
       "count  4339.000000  4339.000000  4336.000000\n",
       "mean      3.821618     2.028117     1.885609\n",
       "std       1.174880     0.997989     0.951810\n",
       "min       1.000000     1.000000     1.000000\n",
       "25%       3.000000     1.000000     1.000000\n",
       "50%       4.000000     2.000000     2.000000\n",
       "75%       5.000000     3.000000     2.000000\n",
       "max       5.000000     5.000000     5.000000"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rfm.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7733809",
   "metadata": {},
   "source": [
    "## 8.2.4 分级标准"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "461acf47",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 根据平均值构建分级\n",
    "rfm['R'] = np.where(rfm['R_value'] > 3.82, '高', '低')\n",
    "rfm['F'] = np.where(rfm['F_value'] > 2.03, '高', '低')\n",
    "rfm['M'] = np.where(rfm['M_value'] > 1.89, '高', '低')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "1523da65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R_value</th>\n",
       "      <th>F_value</th>\n",
       "      <th>M_value</th>\n",
       "      <th>R</th>\n",
       "      <th>F</th>\n",
       "      <th>M</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CustomerID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12346.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12347.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12348.0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12349.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12350.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18281.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18282.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18283.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18287.0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>5.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4339 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            R_value  F_value  M_value  R  F  M\n",
       "CustomerID                                    \n",
       "12346.0         2.0      1.0      5.0  低  低  高\n",
       "12347.0         5.0      3.0      3.0  高  高  高\n",
       "12348.0         4.0      2.0      2.0  高  低  高\n",
       "12349.0         5.0      1.0      2.0  高  低  高\n",
       "12350.0         2.0      1.0      1.0  低  低  低\n",
       "...             ...      ...      ... .. .. ..\n",
       "18281.0         2.0      1.0      1.0  低  低  低\n",
       "18282.0         5.0      2.0      1.0  高  低  低\n",
       "18283.0         5.0      4.0      3.0  高  高  高\n",
       "18287.0         4.0      2.0      2.0  高  低  高\n",
       "U               5.0      5.0      NaN  高  高  低\n",
       "\n",
       "[4339 rows x 6 columns]"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rfm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "c1dfa65d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 汇总\n",
    "rfm['value'] = rfm['R'].str[:] + rfm['F'].str[:] + rfm['M'].str[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "bea81909",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R_value</th>\n",
       "      <th>F_value</th>\n",
       "      <th>M_value</th>\n",
       "      <th>R</th>\n",
       "      <th>F</th>\n",
       "      <th>M</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CustomerID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12346.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>低低高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12347.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高高高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12348.0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>高低高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12349.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>高低高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12350.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低低低</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18281.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低低低</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18282.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>高低低</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18283.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高高高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18287.0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>高低高</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>5.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高高低</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4339 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            R_value  F_value  M_value  R  F  M value\n",
       "CustomerID                                          \n",
       "12346.0         2.0      1.0      5.0  低  低  高   低低高\n",
       "12347.0         5.0      3.0      3.0  高  高  高   高高高\n",
       "12348.0         4.0      2.0      2.0  高  低  高   高低高\n",
       "12349.0         5.0      1.0      2.0  高  低  高   高低高\n",
       "12350.0         2.0      1.0      1.0  低  低  低   低低低\n",
       "...             ...      ...      ... .. .. ..   ...\n",
       "18281.0         2.0      1.0      1.0  低  低  低   低低低\n",
       "18282.0         5.0      2.0      1.0  高  低  低   高低低\n",
       "18283.0         5.0      4.0      3.0  高  高  高   高高高\n",
       "18287.0         4.0      2.0      2.0  高  低  高   高低高\n",
       "U               5.0      5.0      NaN  高  高  低   高高低\n",
       "\n",
       "[4339 rows x 7 columns]"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rfm"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a9a6a40",
   "metadata": {},
   "source": [
    "## 8.2.5 确认分级"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "cf142cdd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 去除空格处理\n",
    "rfm['value'] = rfm['value'].str.strip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "97cb8a71",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建用户分级函数\n",
    "def trans_value(x):\n",
    "    if x == '高高高': return '重要价值客户'\n",
    "    elif x == '高低高': return '重要发展客户'\n",
    "    elif x == '高高低': return '一般价值客户'\n",
    "    elif x == '低高高': return '重要保持客户'\n",
    "    elif x == '低低高': return '重要挽留客户'\n",
    "    elif x == '高低低': return '一般发展客户'\n",
    "    elif x == '低高低': return '一般保持客户'\n",
    "    else: return '一般挽留客户'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "2e375a55",
   "metadata": {},
   "outputs": [],
   "source": [
    "rfm['用户等级'] = rfm['value'].apply(trans_value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "5b351b77",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R_value</th>\n",
       "      <th>F_value</th>\n",
       "      <th>M_value</th>\n",
       "      <th>R</th>\n",
       "      <th>F</th>\n",
       "      <th>M</th>\n",
       "      <th>value</th>\n",
       "      <th>用户等级</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CustomerID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12346.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>低低高</td>\n",
       "      <td>重要挽留客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12347.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高高高</td>\n",
       "      <td>重要价值客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12348.0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>高低高</td>\n",
       "      <td>重要发展客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12349.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>高低高</td>\n",
       "      <td>重要发展客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12350.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低低低</td>\n",
       "      <td>一般挽留客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18281.0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>低低低</td>\n",
       "      <td>一般挽留客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18282.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>低</td>\n",
       "      <td>高低低</td>\n",
       "      <td>一般发展客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18283.0</th>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>高高高</td>\n",
       "      <td>重要价值客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18287.0</th>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高</td>\n",
       "      <td>高低高</td>\n",
       "      <td>重要发展客户</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>5.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>高</td>\n",
       "      <td>高</td>\n",
       "      <td>低</td>\n",
       "      <td>高高低</td>\n",
       "      <td>一般价值客户</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4339 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            R_value  F_value  M_value  R  F  M value    用户等级\n",
       "CustomerID                                                  \n",
       "12346.0         2.0      1.0      5.0  低  低  高   低低高  重要挽留客户\n",
       "12347.0         5.0      3.0      3.0  高  高  高   高高高  重要价值客户\n",
       "12348.0         4.0      2.0      2.0  高  低  高   高低高  重要发展客户\n",
       "12349.0         5.0      1.0      2.0  高  低  高   高低高  重要发展客户\n",
       "12350.0         2.0      1.0      1.0  低  低  低   低低低  一般挽留客户\n",
       "...             ...      ...      ... .. .. ..   ...     ...\n",
       "18281.0         2.0      1.0      1.0  低  低  低   低低低  一般挽留客户\n",
       "18282.0         5.0      2.0      1.0  高  低  低   高低低  一般发展客户\n",
       "18283.0         5.0      4.0      3.0  高  高  高   高高高  重要价值客户\n",
       "18287.0         4.0      2.0      2.0  高  低  高   高低高  重要发展客户\n",
       "U               5.0      5.0      NaN  高  高  低   高高低  一般价值客户\n",
       "\n",
       "[4339 rows x 8 columns]"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rfm"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "981a2938",
   "metadata": {},
   "source": [
    "## 8.2.6 用户分级结果及可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "b9862148",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "重要价值客户    1034\n",
       "重要发展客户    1017\n",
       "一般挽留客户     923\n",
       "一般发展客户     829\n",
       "重要挽留客户     455\n",
       "重要保持客户      66\n",
       "一般价值客户      10\n",
       "一般保持客户       5\n",
       "Name: 用户等级, dtype: int64"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "re = rfm['用户等级'].value_counts()\n",
    "re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "5a6a94db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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BklJSWzevJlXXnnlHy2PiFg3hTAR+U9cu3aNWrVqpTty1a5dO44cOcKRI0cspq9atYq33norw8+6evUqcPeeYKVKlXqkv//FF1/kxo0b5nt9pbl48SI3btzAwcHhb+9ldvv2beDunflNJhNxcXEULlzY/BijkydPmu/Uv2bNGsqXL0+pUqXw8/MDYMOGDdjb2zN06FCOHj1Kv3792L59OwsWLCAqKirdTV9FJHtTCBORxy41NZWzZ8/+o6Ndf+XAgQMAVKpU6ZHfU7NmzQzvxTVhwgSmTZuGvb29xQXzGUl7KHetWrVISEggJSWFefPmmZ85+eyzzzJjxgzKlCnDM888Y/4FZ9pzKJcuXcorr7xCnjx5+OKLL6hfvz5ffPEFCxYsoGbNmlSuXPmR10dErJ9CmIg8dmm3bqhevXqWfN66detwcHCgatWqmf6szz77zHwLiaVLl7J//36LW0rcL+105IULF7CzsyMpKSndry1bt25NbGwsBw4c4KeffiI0NBQ7Ozvq16/P+fPn+fbbb4G7AbJ3796MHj0a4JGfdSki2YdCmIg8duvWrcPGxob69eunm5fRo4f+yoULF/jhhx/w9/fH2dk508t2/9GvsLAwpkyZgqenJ++///7fvvfB05fr16/ns88+47fffiMpKYlChQpRr149nnvuOT777DOaN2/OCy+8YH592q0rnJ2d//VjnUTEeukB3iLyWMXFxTF79mzq1atHoUKF0s1PTk62uH3F1atX2bdvH9u2bQPAxcXF4vVDhw4lLi6Orl27Zvmyfvrpp9SuXZuRI0dy6dKldPPTfrH5sHuUValShbx58zJw4EB27dpFeHg4Q4cOZfbs2Tg7OzNu3Djg7rVlH3zwAX379qVz586UKlUKf39/5s+f/49DqYhYL+16ichjNXbsWK5evcrYsWMznH/79m1iY2PNf7558yYNGzYE4JlnnqFixYrmeVOnTmXZsmU0aNDgsTxr0WQyERwczM2bNylcuLB5eVq2bEl0dDS///47xYsXf2gI8/T0ZMOGDeY/x8TE0KRJE27cuMHq1atxcHBg+vTpjB07ltu3bzNp0iTat2/PzZs36dChA++88w7Tpk3j888/p1atWlm+fiLyZFEIE5HHqkmTJty8edN88fqDJk2aZL7gHaBMmTIMGzaMSpUqUbt2bYvHE12/fh13d3e+/PLLx7a8D/7aMm/evFSsWJE//viDwMBA2rRp88if5eLiwqJFi0hOTqZixYpMnjyZTz/9lNdee41BgwaZjwzmzZuXFStWMH78eKZMmUKBAgWydJ1E5Mlkio6O1rFvEbEat2/ftngAtrW5du3aXz4G6ebNm+meSSki2ZNCmIiIiIgBdGG+iIiIiAEUwkREREQMoBAmIiIiYgCFMBEREREDKISJiIiIGEAhTERERMQACmEiIiIiBlAIExERETGAQpiIiIiIARTCRERERAygECYiIiJiAIUwEREREQMohImIiIgYQCFMRERExAAKYSIiIiIGUAgTERERMYBCmIiIiIgB7IxeAKO5zrpo9CIAEN2piNGLICIiIv8hHQkTERERMYBCmIiIiIgBFMJEREREDJDjrwkTS0/KNXKg6+RERCR7e+QjYXFxcdSvX5/Q0FDztIsXLxIQEECxYsXo3r078fHx5nlhYWHUr18fLy8vBg8eTGpqqnnerl27qFatGqVKlWLixIlZtCoiIiIi1uORQtidO3fo2LEjBw8etJjeqVMnXF1d2blzJzY2NowdOxaA+Ph4AgMD8fHxYfv27YSFhTF//nwAoqKiaNeuHYGBgWzcuJFFixaxc+fOLF4tERERkSfbI4WwDz/8kHLlylG0aFHztMOHD3Pw4EHGjh1LyZIlGT58OAsXLgRg06ZNxMbGMmLECEqWLMmQIUOYN28eAEuWLKF48eL06dOHMmXKMGDAAPM8ERERkZzikUJY//79GTZsGCaTyTzt6NGjVKhQgfz58wPg4eGBg4MDV69e5ejRo1SvXh0HBwcAKlWqRHh4uPl9devWNX+Oj48Phw4dyqr1EREREbEKjxTCSpQokW5aTEwMXl5eFtNcXFy4fPlyunkmkwlbW1uio6PTzXNxceHKlSv/cvFFRERErNO//nWknZ2d+UhXGkdHR2JjY7Gzs8PW1jbdvDt37qR7X9p0ERERkZzkX98nzM3NjaioKItpMTEx2Nvb/6N5adNFREREcpJ/HcKef/55Dh06RGJiInD3FhYnT57E09OTKlWqsG/fPvNrIyIiSEhIwM3NLd28w4cP4+npmYlVEBEREbE+/zqElShRguLFizNhwgQAJkyYQOnSpfH09MTX15fIyEiWLl0KwLhx46hXrx62trb4+/sTGhrK7t27SUxMJDg4GD8/v6xZGxERERErkak75o8bN462bdsyadIk4uLiWLRo0d0PtbMjODiYoKAgBgwYgMlkYu3atcDdX1GOGDGCli1b4uTkRL58+QgJCcn8moiIiIhYEVN0dHTq37/s4aKjo9m7dy/PPvsshQsXtpj3xx9/cOjQIapWrYq7u7vFvIiICE6ePEnNmjVxdnbOzCJkypPymJ4n5RE9T0o94MmpiYiIyOOQ6RBm7Z6U0PGkBI4npR7w5NRERETkcfjX14SJiIiIyL+nECYiIiJiAIUwEREREQMohImIiIgYQCFMRERExAAKYSIiIiIGUAgTERERMYBCmIiIiIgBFMJEREREDKAQJiIiImIAhTARERERAyiEiYiIiBjAzugFEHnSPSkPNdcDzUVEshcdCRMRERExgEKYiIiIiAEUwkREREQMoBAmIiIiYgCFMBEREREDKISJiIiIGEAhTERERMQACmEiIiIiBlAIExERETGAQpiIiIiIARTCRERERAygECYiIiJiAIUwEREREQMohImIiIgYQCFMRERExAAKYSIiIiIGUAgTERERMYBCmIiIiIgBFMJEREREDKAQJiIiImIAhTARERERAyiEiYiIiBhAIUxERETEAAphIiIiIgZQCBMRERExgJ3RCyAi1sV11kWjFwGA6E5FjF4EEZFM0ZEwEREREQMohImIiIgYINMhbN68eTz77LN4enrSsGFDjh8/DkBYWBj169fHy8uLwYMHk5qaan7Prl27qFatGqVKlWLixImZXQQRERERq5OpEHbmzBlGjRrFvHnz+OWXX6hcuTJdunQhPj6ewMBAfHx82L59O2FhYcyfPx+AqKgo2rVrR2BgIBs3bmTRokXs3LkzS1ZGRERExFpkKoQdPnwYHx8fKleuTJEiRejUqRNnzpxh06ZNxMbGMmLECEqWLMmQIUOYN28eAEuWLKF48eL06dOHMmXKMGDAAPM8ERERkZwiUyGsXLlyhIaGcvjwYWJiYpg6dSovvvgiR48epXr16jg4OABQqVIlwsPDATh69Ch169Y1f4aPjw+HDh3KzGKIiIiIWJ1M3aKifPnyBAQEmENVwYIF2bJlC5MnT8bLy8v8OpPJhK2tLdHR0cTExODt7W2e5+LiwpUrVzKzGCIiIiJWJ1NHwvbv38+GDRvYuHEj586do1OnTrRu3ZqUlBTzUbA0jo6O3LlzBzs7O4t5adNFREREcpJMhbBly5bRunVrqlWrRt68eRkwYADR0dEULFiQqKgoi9fGxMRgb2+Pm5ubxby06SIiIiI5SaZCWEpKCpGRkeY/37lzh1u3blGlShX27dtnnh4REUFCQgJubm7p5h0+fBhPT8/MLIaIiIiI1clUCKtVqxZr165l4sSJLF26lPbt2+Pk5MQLL7xAZGQkS5cuBWDcuHHUq1cPW1tb/P39CQ0NZffu3SQmJhIcHIyfn1+WrIyIiIiItcjUhfkBAQGcPHmSadOmceXKFcqUKcO8efNwdnYmODiYoKAgBgwYgMlkYu3atQB4eHgwYsQIWrZsiZOTE/ny5SMkJCRLVkZERETEWpiio6NT//5l/84ff/zBoUOHqFq1Ku7u7hbzIiIiOHnyJDVr1sTZ2flxLcLf0sOILT0p9QDV5EGqh6UnpR4iIv9Wpo6E/Z2CBQvSuHHjDOeVKFGCEiVKPM6/XkREROSJpQd4i4iIiBhAIUxERETEAAphIiIiIgZQCBMRERExgEKYiIiIiAEUwkREREQMoBAmIiIiYgCFMBEREREDKISJiIiIGEAhTERERMQACmEiIiIiBlAIExERETGAQpiIiIiIARTCRERERAygECYiIiJiAIUwEREREQMohImIiIgYQCFMRERExAAKYSIiIiIGUAgTERERMYBCmIiIiIgBFMJEREREDKAQJiIiImIAhTARERERAyiEiYiIiBhAIUxERETEAAphIiIiIgZQCBMRERExgEKYiIiIiAEUwkREREQMoBAmIiIiYgCFMBEREREDKISJiIiIGEAhTERERMQACmEiIiIiBlAIExERETGAQpiIiIiIARTCRERERAygECYiIiJiAIUwEREREQMohImIiIgYQCFMRERExABZFsKGDBnCa6+9Zv5zWFgY9evXx8vLi8GDB5Oammqet2vXLqpVq0apUqWYOHFiVi2CiIiIiNXIkhB29OhRZsyYwejRowGIj48nMDAQHx8ftm/fTlhYGPPnzwcgKiqKdu3aERgYyMaNG1m0aBE7d+7MisUQERERsRqZDmEpKSn07t2bHj16UKJECQA2bdpEbGwsI0aMoGTJkgwZMoR58+YBsGTJEooXL06fPn0oU6YMAwYMMM8TERERySkyHcJmzpzJ8ePHKV68OOvXryc+Pp6jR49SvXp1HBwcAKhUqRLh4eHA3aNmdevWNb/f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\n",
      "text/plain": [
       "<Figure size 648x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(9,5))\n",
    "plt.bar(re.index.tolist(), re.values.tolist(), width=0.5)\n",
    "plt.grid(b=False)\n",
    "plt.xticks(rotation=45)\n",
    "plt.title('用户等级')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "32a9cb2e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<script>\n",
       "    require.config({\n",
       "        paths: {\n",
       "            'echarts':'https://assets.pyecharts.org/assets/echarts.min'\n",
       "        }\n",
       "    });\n",
       "</script>\n",
       "\n",
       "        <div id=\"0695330d20fd4630a9190bfc83e3772e\" style=\"width:900px; height:500px;\"></div>\n",
       "\n",
       "<script>\n",
       "        require(['echarts'], function(echarts) {\n",
       "                var chart_0695330d20fd4630a9190bfc83e3772e = echarts.init(\n",
       "                    document.getElementById('0695330d20fd4630a9190bfc83e3772e'), 'white', {renderer: 'canvas'});\n",
       "                var option_0695330d20fd4630a9190bfc83e3772e = {\n",
       "    \"backgroundColor\": \"#E6E6FA\",\n",
       "    \"animation\": true,\n",
       "    \"animationThreshold\": 2000,\n",
       "    \"animationDuration\": 1000,\n",
       "    \"animationEasing\": \"cubicOut\",\n",
       "    \"animationDelay\": 0,\n",
       "    \"animationDurationUpdate\": 300,\n",
       "    \"animationEasingUpdate\": \"cubicOut\",\n",
       "    \"animationDelayUpdate\": 0,\n",
       "    \"color\": [\n",
       "        \"#c23531\",\n",
       "        \"#2f4554\",\n",
       "        \"#61a0a8\",\n",
       "        \"#d48265\",\n",
       "        \"#749f83\",\n",
       "        \"#ca8622\",\n",
       "        \"#bda29a\",\n",
       "        \"#6e7074\",\n",
       "        \"#546570\",\n",
       "        \"#c4ccd3\",\n",
       "        \"#f05b72\",\n",
       "        \"#ef5b9c\",\n",
       "        \"#f47920\",\n",
       "        \"#905a3d\",\n",
       "        \"#fab27b\",\n",
       "        \"#2a5caa\",\n",
       "        \"#444693\",\n",
       "        \"#726930\",\n",
       "        \"#b2d235\",\n",
       "        \"#6d8346\",\n",
       "        \"#ac6767\",\n",
       "        \"#1d953f\",\n",
       "        \"#6950a1\",\n",
       "        \"#918597\"\n",
       "    ],\n",
       "    \"series\": [\n",
       "        {\n",
       "            \"type\": \"pie\",\n",
       "            \"name\": \" \",\n",
       "            \"clockwise\": true,\n",
       "            \"data\": [\n",
       "                {\n",
       "                    \"name\": \"\\u91cd\\u8981\\u4ef7\\u503c\\u5ba2\\u6237\",\n",
       "                    \"value\": 1034\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u91cd\\u8981\\u53d1\\u5c55\\u5ba2\\u6237\",\n",
       "                    \"value\": 1017\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u4e00\\u822c\\u633d\\u7559\\u5ba2\\u6237\",\n",
       "                    \"value\": 923\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u4e00\\u822c\\u53d1\\u5c55\\u5ba2\\u6237\",\n",
       "                    \"value\": 829\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u91cd\\u8981\\u633d\\u7559\\u5ba2\\u6237\",\n",
       "                    \"value\": 455\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u91cd\\u8981\\u4fdd\\u6301\\u5ba2\\u6237\",\n",
       "                    \"value\": 66\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u4e00\\u822c\\u4ef7\\u503c\\u5ba2\\u6237\",\n",
       "                    \"value\": 10\n",
       "                },\n",
       "                {\n",
       "                    \"name\": \"\\u4e00\\u822c\\u4fdd\\u6301\\u5ba2\\u6237\",\n",
       "                    \"value\": 5\n",
       "                }\n",
       "            ],\n",
       "            \"radius\": \"55%\",\n",
       "            \"center\": [\n",
       "                \"50%\",\n",
       "                \"50%\"\n",
       "            ],\n",
       "            \"roseType\": \"radius\",\n",
       "            \"label\": {\n",
       "                \"show\": true,\n",
       "                \"position\": \"top\",\n",
       "                \"color\": \"rgba(25, 25, 112, 0.8)\",\n",
       "                \"margin\": 8\n",
       "            },\n",
       "            \"tooltip\": {\n",
       "                \"show\": true,\n",
       "                \"trigger\": \"item\",\n",
       "                \"triggerOn\": \"mousemove|click\",\n",
       "                \"axisPointer\": {\n",
       "                    \"type\": \"line\"\n",
       "                },\n",
       "                \"showContent\": true,\n",
       "                \"alwaysShowContent\": false,\n",
       "                \"showDelay\": 0,\n",
       "                \"hideDelay\": 100,\n",
       "                \"formatter\": \"{a} <br>{b}: {c} ({d}%)\",\n",
       "                \"textStyle\": {\n",
       "                    \"fontSize\": 14\n",
       "                },\n",
       "                \"borderWidth\": 0,\n",
       "                \"padding\": 5\n",
       "            },\n",
       "            \"rippleEffect\": {\n",
       "                \"show\": true,\n",
       "                \"brushType\": \"stroke\",\n",
       "                \"scale\": 2.5,\n",
       "                \"period\": 4\n",
       "            }\n",
       "        }\n",
       "    ],\n",
       "    \"legend\": [\n",
       "        {\n",
       "            \"data\": [\n",
       "                \"\\u91cd\\u8981\\u4ef7\\u503c\\u5ba2\\u6237\",\n",
       "                \"\\u91cd\\u8981\\u53d1\\u5c55\\u5ba2\\u6237\",\n",
       "                \"\\u4e00\\u822c\\u633d\\u7559\\u5ba2\\u6237\",\n",
       "                \"\\u4e00\\u822c\\u53d1\\u5c55\\u5ba2\\u6237\",\n",
       "                \"\\u91cd\\u8981\\u633d\\u7559\\u5ba2\\u6237\",\n",
       "                \"\\u91cd\\u8981\\u4fdd\\u6301\\u5ba2\\u6237\",\n",
       "                \"\\u4e00\\u822c\\u4ef7\\u503c\\u5ba2\\u6237\",\n",
       "                \"\\u4e00\\u822c\\u4fdd\\u6301\\u5ba2\\u6237\"\n",
       "            ],\n",
       "            \"selected\": {},\n",
       "            \"show\": false,\n",
       "            \"padding\": 5,\n",
       "            \"itemGap\": 10,\n",
       "            \"itemWidth\": 25,\n",
       "            \"itemHeight\": 14\n",
       "        }\n",
       "    ],\n",
       "    \"tooltip\": {\n",
       "        \"show\": true,\n",
       "        \"trigger\": \"item\",\n",
       "        \"triggerOn\": \"mousemove|click\",\n",
       "        \"axisPointer\": {\n",
       "            \"type\": \"line\"\n",
       "        },\n",
       "        \"showContent\": true,\n",
       "        \"alwaysShowContent\": false,\n",
       "        \"showDelay\": 0,\n",
       "        \"hideDelay\": 100,\n",
       "        \"textStyle\": {\n",
       "            \"fontSize\": 14\n",
       "        },\n",
       "        \"borderWidth\": 0,\n",
       "        \"padding\": 5\n",
       "    },\n",
       "    \"title\": [\n",
       "        {\n",
       "            \"text\": \"\\u7528\\u6237\\u7b49\\u7ea7\\u6bd4\\u4f8b\",\n",
       "            \"left\": \"center\",\n",
       "            \"top\": \"20\",\n",
       "            \"padding\": 5,\n",
       "            \"itemGap\": 10,\n",
       "            \"textStyle\": {\n",
       "                \"color\": \"#000\"\n",
       "            }\n",
       "        }\n",
       "    ]\n",
       "};\n",
       "                chart_0695330d20fd4630a9190bfc83e3772e.setOption(option_0695330d20fd4630a9190bfc83e3772e);\n",
       "        });\n",
       "    </script>\n"
      ],
      "text/plain": [
       "<pyecharts.render.display.HTML at 0x1680337beb0>"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pie = (\n",
    "    Pie(init_opts=opts.InitOpts(width='900px', height='500px', bg_color='#E6E6FA'))   \n",
    "    .add(\n",
    "        ' ',\n",
    "        data_pair = [[x,y] for x, y in zip(re.index.tolist(), re.values.tolist())],\n",
    "        rosetype = 'radius',\n",
    "        radius = '55%',\n",
    "        center = ['50%', '50%'],\n",
    "        label_opts=opts.LabelOpts(is_show=False, position='center')\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(\n",
    "            title='用户等级比例',\n",
    "            pos_left='center',\n",
    "            pos_top='20',\n",
    "            title_textstyle_opts=opts.TextStyleOpts(color='#000'),\n",
    "        ),\n",
    "        legend_opts=opts.LegendOpts(is_show=False)\n",
    "    )\n",
    "    .set_series_opts(\n",
    "        tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{a} <br>{b}: {c} ({d}%)'),\n",
    "        label_opts=opts.LabelOpts(color='rgba(25, 25, 112, 0.8)'),\n",
    "    )\n",
    ")\n",
    "pie.render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "599cb874",
   "metadata": {},
   "source": [
    "# 9.结论与建议"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e60e1a01",
   "metadata": {},
   "source": [
    "## 一、结论\n",
    ">1月和12月退货率高于月平均退货率的原因：\n",
    "\n",
    ">1.根据第一篇实战数据分析知道影响总销量最大的是英国，同时其他也大都是西方国家，1月1日是他们的新年\n",
    "\n",
    ">2.以及12月25日是圣诞节，购物量大幅增加的同时也导致了退货量的增加。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3faf775",
   "metadata": {},
   "source": [
    "## 二、建议\n",
    ">1.实行积分制度，每次客户选择不同的航班，购买的商品都可以按商品的价格一定比例换算成积分，达到一定积分时可以减少扣除支付时的费用，或者兑换礼品\n",
    "\n",
    ">2.会员升级或者保级，在会员升级或保级评价的时间点前，对接近但尚未达到要求的较高消费客户进行提醒或促销活动，提高客户满意度。\n",
    "\n",
    ">3.获取新客成本远大于维持老客，应努力维系客户关系水平，保持优质客户。差异化管理、精准营销，提高客户忠诚度、满意度，延长客户高水平消费。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "21822214",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}